import axios from "axios";
import {
	baseApi
} from "../config/index.js";

const TOKEN_INVALID = "token已过期，请重新登录";
const NETWORK_ERROR = "网络请求异常，请稍后重试";


const service = axios.create({
	baseURL: baseApi,
	timeout: 8000,
});

/* service.interceptors.request.use((req) => {
	const headers = req.headers ;
	headers.Authorization = state.token ;
	return req ;
})
 */
service.interceptors.response.use(response => {
  // 对响应数据做点什么
  return response.data; // 根据你的需求返回数据或者处理后的数据
}, error => {
	let message='';
  // 对响应错误做点什么
  if (error.response) {
    // 请求已发出，但服务器响应的状态码不在 2xx 范围内
    //console.error('Error Status:', error.response.status);
    //console.error('Error Data:', error.response.data);
    // 根据错误状态码进行不同的错误处理
    switch (error.response.status) {
      case 401:
        message=TOKEN_INVALID;
        break;
      case 403:
        message='禁止访问';
        break;
      case 404:
        message='资源未找到';
        break;
	  case 415:
		message='不支持的媒体格式,请求数据错误';
		break;	
      default:
        // 其他错误处理
        break;
    }
  } else if (error.request) {
    // 请求已经发出，但没有收到响应
    message=NETWORK_ERROR;
  } else {
    // 在设置请求时发生了某些错误
   message='请求时发生了某些错误';
  }
  error.message=message;
  return Promise.reject(error); // 返回一个失败的Promise，以便后续的错误处理程序可以继续处理这个错误。
});

function request(options) {
	options.method = options.method || 'get';
	let method = options.method.toLowerCase();
	if ('post' === method) {
		const params = new URLSearchParams();
		for (const key in options.data) {
			let value = options.data[key];
			params.append(key, value);
		}
		return service.post(options.url, params, {
			headers: {
				'Content-Type': 'application/x-www-form-urlencoded'
			}
		});
	} else if ('patch' === method) {
		return service.patch(options.url, options.data);
	} else {
		options.params = options.data;
		return service(options);
	}
}
export default request;